/**
 * @author shenjun
 * @createdate 2009-09-11
 * @todo 第一次开发是为了解决无限级下拉联动的解决方案
 * 目前通过ajax方法取数据，如果有下级，自动在后面添加
 * 支持已取过的数据进行缓存，下次重复选择时不再在服务器上取数据
 * @modifydate 2009-09-16
 * @todo 添加根据多个的map字符串来生成好下拉并选中
 */

function icedraw($param){
	var $th = this;
	/* 继承参数 */
	$th.param = $.extend({
			'change':'',					//可以绑定其它的onchange事件
			'click':'',					//可以绑定onclick事件
			'nochild':'',					//没有下级菜单时调用的方法
			'showdiv':'test_div',		//用来显示下拉菜单的
			'async':false,				//用来判断是同步请求还是异步请求
			'type':'ajax',				//取数据的方法
			'addchoose':true,				//是否需要添加请选择的选项
			'url':'',						//ajax取数据的地址
			'id':'icedraw_select_',		//下拉菜单的ID前缀
			'post':'id',					//提交时的data部份的值
			'classname':'icedraw',		//实例化类的变量名
			'cache':true					//是否需要把取过的值缓存起来
		},$param
	);
	/*定义存储当前所有下拉菜单到第几个节点*/
	var select_index=0;
	/*定义缓存数据的变量*/
	var cache_data=[];
	
	/*根据data的值来取下一个节点*/
	$th.get_next=function($data,$value){
		if($data!=''){
			$.ajax({
				async:$th.param.async,
				type:'post',
				url:$th.param.url,
				data:$data,
				success:function(e){
					var $result=JSON.decode(e);
					if($result.data==1){
						/*生成新的下拉*/
						if($th.param.cache===true)		cache_data[$value]=$result.results;		//如果开启缓存，当已取到的数据保存起来
						$th.appendhtml($result.results);
						/*$html=$th.create_html($result.results);
						$('#'+$th.param.showdiv).append($html);*/
					}else if($result.data==2 && $th.param.nochild!=''){
						eval($th.param.nochild+'()');
						/*没有下级菜单了*/
					}else{
						alert('返回结果不正常！');
					}
				}
			});
		}
	}
	/*下拉菜单的默认onchange事件*/
	$th.changed=function(e){
		var $id=$(e).attr('id');
		$id=$id.split($th.param.id);
		$id=$id[1];
		if(isNaN($id) && $id<1){
			alert('此下拉菜单不支持方法！！');
			return false;
		}
		$th.remove($id);		//去掉当前ID之后的所有已出现的下拉菜单
		var $value=$(e).val();	//取当前选中的ID的值
		if($value==''){
			return false;
		}
		$th.ready($value);
	}
	/*去掉比传递过来的id要大的下拉菜单*/
	$th.remove=function($id){
		if($id<select_index){
			var $i=parseInt($id)+1;
			for($i;$i<=select_index;$i++){
				$('#'+$th.param.id+$i).remove();
			}
			select_index=$id;
		}
		return true;
	}
	/*最开始生成的菜单*/
	$th.begin=function($data){
		$param=$th.param.post+'='+$data;
		$th.get_next($param);		//取下一个节点的值
	}
	/*生成select的HTML部份*/
	$th.create_html=function($data){
		if($data.length==0){
			return false;
		}
		select_index++;
		$html='<select id="'+$th.param.id+select_index+'" onchange="'+$th.param.classname+'.changed(this);';
		if($th.param.change!=''){
			$html+=$th.param.change+'()"';
		}else{
			$html+='"';
		}
		if($th.param.click!=''){
			$html+=' onclick="'+$th.param.click+'()"';
		}
		$html+=' >';
		if($th.param.addchoose===true){
			$html+='<option value="">请选择</option>';
		}
		for(var i=0;i<$data.length;i++){
			$html+='<option value="'+$data[i].id+'">'+$data[i].names+'</option>';
		}
		$html+='</select>';
		return $html;
	}
	/*取的最后一个下拉菜单的值*/
	$th.lastvalue=function(){
		return $('#'+$th.param.id+select_index).val();
	}
	/*取的所有的ID，各ID之间有,分隔*/
	$th.allvalue=function(){
		$return=[];
		for (var $i=1;$i<=select_index;$i++){
			$return.push($('#'+$th.param.id+$i).val());
		}
		return $return.join(',');
	}
	/*把生成好的HTML追加至指定的地方*/
	$th.appendhtml=function($data){
		$html=$th.create_html($data);
		$('#'+$th.param.showdiv).append($html);
	}
	/*根据已经给出的maping来生成每个下拉菜单*/
	$th.map_create=function($map,$flag){
		$map=$map.split($flag);
		$th.begin(0);
		for(var i=0;i<$map.length;i++){
			var $selectid=$th.param.id+parseInt((i)+1);
			$('#'+$selectid).val($map[i]);
			$th.ready($map[i]);
		}
	}
	/*组装条件，并开始取值*/
	$th.ready=function($value){
		var $param=$th.param.post+'='+$value;
		if($th.param.cache===true && typeof(cache_data[$value])!='undefined'){
			$th.appendhtml(cache_data[$value]);
		}else{
			$th.get_next($param,$value);		//取下一个节点的值
		}
	}
}